#define _CRT_SECURE_NO_WARNINGS 1


//#include<vector>
//#include<iostream>
//
//using namespace std;
//
//int longestOnes(vector<int>& nums, int k)
//{
//    int size = nums.size();
//    int left = 0, right = 0;
//    int count = 0, Max = 0;
//    while (right < size)
//    {
//        if (nums[right] == 0)
//        {
//            count++;
//        }
//        while (count > k)
//        {
//            if (nums[left] == 0)
//            {
//                count--;
//            }
//            left++;
//        }
//        Max = max(Max, right - left + 1);
//        right++;
//    }
//    return Max;
//}
//
//int main()
//{
//    vector<int> v = { 0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1 };
//    cout << longestOnes(v, 3) << endl;
//
//	return 0;
//}


//#include<algorithm>
//#include<string>
//#include<iostream>
//
//using namespace std;
//
//int main()
//{
//    int n = 0;
//    string s;
//    cin >> n >> s;
//    reverse(s.begin(), s.end());
//    int count = 0;
//    string str;
//    for (auto& e : s)
//    {
//        str += e;
//        count++;
//        if (count == 3)
//        {
//            str += ',';
//            count = 0;
//        }
//    }
//    cout << str << endl;
//
//    return 0;
//}


#include<iostream>

using namespace std;

int main()
{
    int n = 0;
    cin >> n;
    int a = 0, b = 1, c = 2;
    if (n == 0)
    {
        cout << a << endl;
        return 0;
    }
    else if (n == 1)
    {
        cout << b << endl;
        return 0;
    }
    else if (n == 2)
    {
        cout << c << endl;
        return 0;
    }
    int temp = n - 2;
    while (temp > 0)
    {
        a = b + c;
        temp--;
        b = c + a;
        temp--;
        c = a + b;
        temp--;
    }
    if (a > b && a > c)
    {
        cout << c << endl;
    }
    else if (b > a && b > c)
    {
        cout << a << endl;
    }
    else
    {
        cout << b << endl;
    }

    return 0;
}